'===== Edit Menu.FLTR ===== '=== © 1995 Staz Software === '===== Program Generator ===== '======= ======= '========================================= INCLUDE FILE _aplIncl GLOBALS "Runtime.GLBL" COMPILE 0,_pGproject'dimmedVarsOnly END GLOBALS '----------------------------------------- GOTO "Edit Menu.FLTR" '----------------------------------------- DEF FN pGfindMenu(theTitle$) USING GLBLfindMenu& _EMUndoItem = 1 _EMCutItem = 3 _EMCopyItem = 4 _EMPasteItem = 5 _EMClearItem = 6 _EMSelectAllItem = 7 '========================================= LOCAL FN EMenableUndo '--------------------------------------- ' Save current field for later undo. '--------------------------------------- DIM theField,t$,editMenu theField = WINDOW(_EFnum) DEF DISPOSEH(gUndoHndl&) LONG IF theField LONG IF WINDOW(_EFTextLen) t$ = STR#(_baseID - 3,1) editMenu = FN pGfindMenu(t$) GET FIELD gUndoHndl&,theField gUndoStart = WINDOW(_selStart) gUndoEnd = WINDOW(_selEnd) END IF END IF END FN '========================================= LOCAL FN EMautoMenu '--------------------------------------- ' Decide when to set up undo. '--------------------------------------- DIM mHndl&,t$,theItem$ mHndl& = FN GETMHANDLE(gWhichMenu) LONG IF mHndl& t$ = mHndl&..menuData$ SELECT t$'Font,Size,Style CASE STR#(_baseID - 4,1),STR#(_baseID - 4,2),STR#(_baseID - 4,3) FN EMenableUndo gUndoable = _zTrue CASE STR#(_baseID - 3,1) CALL GETITEM(mHndl&,gWhichItem,theItem$) SELECT theItem$ CASE STR#(_baseID - 3,2)'"Undo" EDIT FIELD WINDOW(_EFnum),&gUndoHndl& SETSELECT gUndoStart,gUndoEnd gUndoable = _false CASE STR#(_baseID - 3,3)'"Select All" LONG IF WINDOW(_EFnum) SETSELECT 0,WINDOW(_EFTextLen) END IF END SELECT END SELECT END IF END FN '========================================= LOCAL FN EMfixEditMenu '--------------------------------------- ' Enable/disable edit menu items. '--------------------------------------- DIM selAllItem,lastItem,editMenu,mHndl& DIM itemCount,thisItem,theField,x,t$ DIM selAllItem$ selAllItem = 0 lastItem = _EMClearItem t$ = STR#(_baseID - 3,1) editMenu = FN pGfindMenu(t$) mHndl& = FN GETMHANDLE(editMenu) LONG IF mHndl& itemCount = FN COUNTMITEMS(mHndl&) ' See if menu contains "Select All" selAllItem$ = STR#(_baseID - 3,3) selAllItem$ = UCASE$(selAllItem$) FOR thisItem = 1 TO itemCount CALL GETITEM(mHndl&,thisItem,t$) LONG IF UCASE$(t$) = selAllItem$ selAllItem = thisItem thisItem = itemCount END IF NEXT IF selAllItem THEN MENU editMenu,selAllItem,_disable ' DA is currently in front LONG IF SYSTEM(_aplActive) = 0 MENU editMenu,_EMUndoItem ,_enable,"Undo" MENU editMenu,_EMCutItem ,_enable MENU editMenu,_EMCopyItem ,_enable MENU editMenu,_EMPasteItem,_enable MENU editMenu,_EMClearItem,_enable XELSE ' This application is currently in front LONG IF WINDOW(_activeWnd) = 0 OR gUndoHndl& = 0 OR gUndoable = 0 t$ = STR#(_baseID - 3,4) MENU editMenu,_EMUndoItem,_disable,t$ XELSE t$ = STR#(_baseID - 3,2) MENU editMenu,_EMUndoItem,_enable,t$ END IF FOR x = _EMCutItem TO _EMClearItem MENU editMenu,x,0 NEXT ' Check for text/picture on clipboard theField = WINDOW(_EFnum) LONG IF theField LONG IF WINDOW(_textClip) MENU editMenu,_EMPasteItem,_enable END IF LONG IF WINDOW(_EFTextLen) LONG IF WINDOW(_selStart) <> WINDOW(_selEnd) MENU editMenu,_EMCutItem ,_enable MENU editMenu,_EMCopyItem ,_enable MENU editMenu,_EMClearItem ,_enable END IF IF selAllItem THEN MENU editMenu,selAllItem,_enable END IF END IF END IF END IF END FN '========================================= LOCAL FN EMcheckScrapSize '--------------------------------------- ' Make sure text paste does not exceed ' the 32K limit of TextEdit. '--------------------------------------- DIM theSize&,offSet&,editMenu,t$ LONG IF gWhat = 16 t$ = STR#(_baseID - 3,1) editMenu = FN pGfindMenu(t$) LONG IF gWhereY = editMenu LONG IF gWhereX = _EMPasteItem theSize& = FN GETSCRAP(0,_"TEXT",offSet&) LONG IF theSize& + WINDOW(_EFTextLen) > 32750& % EVENT,0 EVENT% = 7 DIALOG = _showErr END IF END IF END IF END IF END FN '========================================= "Edit Menu.FLTR" '========================================= SELECT gLongAction& CASE _menuLong : FN EMautoMenu CASE _mShutdown : DEF DISPOSEH(gUndoHndl&) CASE _oAdjustMenu : FN EMfixEditMenu CASE _oEvents : FN EMcheckScrapSize CASE _wActivate : FN EMenableUndo CASE _fActivate : FN EMenableUndo : gUndoable = _false CASE _fChange : FN EMenableUndo : gUndoable = _zTrue CASE _fKeypress : gUndoable = _zTrue LONG IF WINDOW(_selStart) < WINDOW(_selEnd) FN EMenableUndo END IF LONG IF WINDOW(_EFTextLen) > 32750& gKey$ = "" gAction = 0 EVENT% = 8 DIALOG = _showErr END IF END SELECT '========================================= IF 0 THEN RETURN